Unityエディタ拡張 : Ctrl+Gでグループ化
Ctrl+Gで選択されているオブジェクトをグループ化
Shift + Ctrl + G で選択されているオブジェクトをグループ化を解除するようなエディタ拡張
code:EditorGroupObject.cs
using UnityEngine;
using UnityEditor;
using System.Linq;
public class EditorGroupObject
{
static bool called = false;
// 選択しているオブジェクトをグループ化する
private static void GroupSelected()
{
if (!Selection.activeTransform) return;
int firstIndex = Selection.transforms.Min(t => t.GetSiblingIndex());
// 親オブジェクト
var go = new GameObject(Selection.activeTransform.name + " Group");
Undo.RegisterCreatedObjectUndo(go, "Group Selected");
go.transform.SetSiblingIndex(firstIndex);
// 選択オブジェクトを入れ子にする
go.transform.SetParent(Selection.activeTransform.parent, false);
foreach (var transform in Selection.transforms.OrderBy(t => t.GetSiblingIndex()))
{
Undo.SetTransformParent(transform, go.transform, "Group Selected");
}
Selection.activeGameObject = go;
}
// 選択オブジェクトの子オブジェクトを外に出す
static void RemoveChildren()
{
// 重複して呼ばれないようにする
if (called) { return; }
foreach (var transform in Selection.transforms.OrderBy(t => t.GetSiblingIndex()))
{
if (transform.childCount == 0) { continue; }
called = true;
int si = transform.GetSiblingIndex();
int childIndex = 0;
var newParent = transform.parent;
foreach (Transform child in transform)
{
// 変更前の状態を記録
Undo.SetTransformParent(child, newParent, "Change Parent");
child.SetParent(newParent);
child.SetSiblingIndex(si + childIndex + 1);
childIndex++;
}
Undo.RegisterCompleteObjectUndo(transform, "Inactivate selection");
transform.gameObject.SetActive(false);
}
EditorApplication.delayCall += () =>
{
called = false;
};
}
}